iT邦幫忙

2024 iThome 鐵人賽

DAY 12
0
自我挑戰組

New challenge 從頭製作Line Bot系列 第 19

第十九天 測試提示詞與程式

  • 分享至 

  • xImage
  •  

今天要把提示詞的程式加入到主程式裡並測試程式還能不能正常運作
從昨天訓練完提示詞的Google AI Studio開始,首先去裡面編輯介面的get code裡複製程式https://ai.google.dev/
https://ithelp.ithome.com.tw/upload/images/20241002/20169352DQXEOuWvFq.png
複製程式碼後就可以進入到Git hub裡修改主程式。這裡附上貼上的程式碼

import os
from flask import Flask, request, abort
from linebot import LineBotApi, WebhookHandler
from linebot.exceptions import InvalidSignatureError
from linebot.models import MessageEvent, TextMessage, TextSendMessage
import google.generativeai as genai
from dotenv import load_dotenv

# 載入環境變數
load_dotenv()

app = Flask(__name__)

# Line Bot 和 OpenAI 設定
LINE_CHANNEL_ACCESS_TOKEN = os.getenv('LINE_CHANNEL_ACCESS_TOKEN')
LINE_CHANNEL_SECRET = os.getenv('LINE_CHANNEL_SECRET')
GEMINI_API_KEY = os.getenv('GEMINI_API_KEY')

line_bot_api = LineBotApi(LINE_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(LINE_CHANNEL_SECRET)

# Google Gemini 設定
genai.configure(api_key=GEMINI_API_KEY)

# 建立生成模型
generation_config = {
    "temperature": 1,
    "top_p": 0.95,
    "top_k": 64,
    "max_output_tokens": 8192,
    "response_mime_type": "text/plain",
}
safety_settings = [
    {"category": "HARM_CATEGORY_HARASSMENT", "threshold": "BLOCK_LOW_AND_ABOVE"},
    {"category": "HARM_CATEGORY_HATE_SPEECH", "threshold": "BLOCK_LOW_AND_ABOVE"},
    {"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", "threshold": "BLOCK_LOW_AND_ABOVE"},
    {"category": "HARM_CATEGORY_DANGEROUS_CONTENT", "threshold": "BLOCK_LOW_AND_ABOVE"},
]

model = genai.GenerativeModel(
    model_name="gemini-1.5-flash-latest",
    safety_settings=safety_settings,
    generation_config=generation_config,
)

chat_session = model.start_chat(
    history=[
        {
            "role": "user",
            "parts": [
                "請推薦我一個宜蘭運動的地點",
            ],
        },
        {
            "role": "model",
            "parts": [
                "請告訴我你喜歡什麼樣的運動,以及你希望運動地點有什麼特點,例如:\n\n* **運動種類:** 跑步、騎自行車、游泳、攀岩、登山、戶外運動等等\n* **地點偏好:** 海邊、山區、公園、室內場館等等\n* **難度:** 輕鬆、中等、挑戰\n* **環境要求:** 風景優美、交通方便、設備齊全等等\n\n這樣我可以更精准地推薦適合你的宜蘭運動地點。 \n\n",
            ],
        },
        {
            "role": "user",
            "parts": [
                "當user提問請推薦我一個宜蘭運動的地點,請都以上述model的模板做出回應",
            ],
        },
        {
            "role": "model",
            "parts": [
                "請告訴我你喜歡什麼樣的運動,以及你希望運動地點有什麼特點,例如:\n\n* **運動種類:** 跑步、騎自行車、游泳、攀岩、登山、戶外運動等等\n* **地點偏好:** 海邊、山區、公園、室內場館等等\n* **難度:** 輕鬆、中等、挑戰\n* **環境要求:** 風景優美、交通方便、設備齊全等等\n\n這樣我可以更精准地推薦適合你的宜蘭運動地點。 \n",
            ],
        },
        {
            "role": "user",
            "parts": [
                "當user的提問有關於宜蘭,就以上述model的模板做出回應",
            ],
        },
        {
            "role": "model",
            "parts": [
                "好的,請告訴我你想要在宜蘭做什麼運動,以及你希望運動地點有什麼特點,例如:\n\n* **運動種類:** 跑步、騎自行車、游泳、攀岩、登山、戶外運動等等\n* **地點偏好:** 海邊、山區、公園、室內場館等等\n* **難度:** 輕鬆、中等、挑戰\n* **環境要求:** 風景優美、交通方便、設備齊全等等\n\n這樣我可以更精准地推薦適合你的宜蘭運動地點。 \n",
            ],
        },
    ]
)

def gemini_response(text):
    response = chat_session.send_message(text)
    return response.text

@app.route("/callback", methods=['POST'])
def callback():
    signature = request.headers['X-Line-Signature']
    body = request.get_data(as_text=True)
    app.logger.info("Request body: " + body)

    try:
        handler.handle(body, signature)
    except InvalidSignatureError:
        abort(400)
    return 'OK'

@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    msg = event.message.text
    print(f"Received message: {msg}")
    try:
        response = gemini_response(msg)
        print(f"Gemini response: {response}")
        reply = TextSendMessage(text=response)
    except Exception as e:
        print(f"Error: {str(e)}")
        reply = TextSendMessage(text="請問有關宜蘭的哪方面活動資訊?")
    
    line_bot_api.reply_message(event.reply_token, reply)

if __name__ == "__main__":
    port = int(os.environ.get('PORT', 5000))
    app.run(host='0.0.0.0', port=port)

接著進入Render後去查看程式能否運行,我這次進入後同樣出現了一些錯誤,這次一樣是因為少了一兩個括號和需要補上原本在get code裡附上的函式庫。在修正完所有問題以後終於可以正常運行了。
下一步便是到Line Bot上測試它有沒有正常運作
https://ithelp.ithome.com.tw/upload/images/20241002/201693522i1uUApYVF.jpg
在這第一次測試的結果裡它還沒有辦法辨別我說的話並回應,目前自己推測有問題的地方有三個

  1. 程式碼的某個地方有問題使它無法正常偵測我說的話
  2. Line Bot設定上有問題使它和程式或Gemini沒有連上
  3. Gemini 的大語言沒有串聯進Render裡
    明天我會繼續尋找是哪出問題和出了什麼問題並跟大家分享,現在不確定問題的情況下希望能盡量快速的處理才能在這鐵人賽完成,謝謝大家閱讀這篇文章,雖然沒有什麼實質進展但是我會盡量排除問題。

上一篇
第十八天 訓練提示詞
下一篇
第二十天 修正錯誤
系列文
New challenge 從頭製作Line Bot30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言